home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 November: Tool Chest / Dev.CD Nov 98 TC.toast / Sample Code / Snippets / Toolbox / jGNEFilter / init.a next >
Encoding:
Text File  |  1992-07-15  |  1.8 KB  |  76 lines  |  [TEXT/MPS ]

  1. ; example GetNextEvent filter (using jGNEFilter)
  2. ; Steve Falkenburg 10/9/91
  3. ;
  4. ; this sample installs a global GetNextEvent filter using the
  5. ; mechanism described in Tech Note #85
  6. ;
  7. ; this filter beeps the speaker whenever a key is pressed with the shift key down
  8. ;
  9. ; make sure the system heap bit and locked bit are set for this code resource!
  10. ;
  11.  
  12.             include 'ToolEqu.a'
  13.             include 'SysEqu.a'
  14.             include 'Traps.a'
  15.             include 'QuickEqu.a'
  16.             include    'sysErr.a'
  17.  
  18. ; jGNE a6 stack offsets
  19. eventResult    equ        8
  20.  
  21. MAIN        proc    export
  22.             
  23. start        bra.s    setup
  24.             
  25. ; global data
  26. ;
  27. oldGNE        ds.l    1
  28. gneResult    ds.w    1
  29.  
  30. ; GetNextEvent Filter
  31. ;
  32. gnePatch    link    a6,#0                ; link for stack frame
  33.             movem.l    d0-d2/a0-a2,-(sp)    ; save registers
  34.             
  35.             lea        gneResult,a0        ; save old GetNextEvent result
  36.             move.w    d0,(a0)
  37.             
  38.             move.w    evtNum(a1),d0
  39.             cmpi.w    #keyDwnEvt,d0        ; check for keydown and autokey
  40.             beq.s    gotkey
  41.             cmpi.w    #autoKeyEvt,d0
  42.             bne.s    gneDone
  43.             
  44. gotkey        btst    #shiftKey,evtMeta(a1)    ; check to see if shift key down
  45.             beq.s    gneDone
  46.             
  47.             move.w    #20,-(sp)            ; if so, beep
  48.             _SysBeep
  49.             
  50. gneDone        lea        gneResult,a0
  51.             move.w    (a0),eventResult(a6)
  52.             move.w    d0,eventResult(a6)    ; store new boolean result on stack
  53.             movem.l    (sp)+,d0-d2/a0-a2    ; restore registers
  54.             unlk    a6                    ; unlink stack frame
  55.             move.l    oldGNE,-(sp)        ; get address of original GNE filter
  56.             rts                            ; return into original GNE filter
  57.  
  58.  
  59. ; setup code here (INIT time)
  60.  
  61. setup        lea        start,a0            ; float ourselves in system heap
  62.             _RecoverHandle                ; by calling recoverhandle
  63.             move.l    a0,-(sp)            ; to get handle
  64.             _DetachResource                ; and detachresouce to release ourselves
  65.             
  66.             lea        oldGNE,a0            ; patch ourselves into the JGNE chain
  67.             move.l    JGNEFilter,(a0)
  68.             lea        gnePatch,a0
  69.             move.l    a0,d0
  70.             _StripAddress                ; you *have* to do this to be 32 bit clean
  71.             move.l    d0,JGNEFilter
  72.                                     
  73. done        rts
  74.             endp
  75.             
  76.             end